<?php
/**
 * @package PHP.aide + YEAP project
 * @name Storage Engine for ALL ;)
 * CRUD model
 *
 * @license GPL v.2
 * @copyright (cc) VS aka Virtual Stalker, 2009
 * 	call@2128506.su
 *
 * энжой! =;)
 * $Id$
 * */



/**
 *	Класс сам по себе является датааксессором, сам себе оромом и включает драйвер бд
 *	попахивает god object, но это не так
 * */
include_once CLASS_PATH.'/CRUD.intrf.php';

abstract class StorageEngine	implements CRUD
{
	protected $__instance = null;	//	нулевой, пустой экземпляр
	protected $__spool = array();	//	коллекция экземпляров
	protected $__accessor = null;	//	собственно, агент доступа

	final function __construct($what)
	{
		if (is_object($what))
			$this->__instance = $what;

		$this->init();
	}
	function __destruct()	//	не забываем обновлять при выходе. хотя можно встроить транзакции
	{	$this->update();	}

	function init()
	{	/*do smthng*/	}

	public function setAccessor($a)
	{	$this->__accessor = $a;	}

	public function & get()
	{	return $this->__spool;	}
	public function & data()
	{	return $this->__spool;	}

	/**
	 * добавляет экземпляр в коллекицию
	 * */
	public function & create($instance = null)	//	зачем параметр?
	{
		if (!is_null($instance))	//	сейчас не сразу
			$instance = $this->__instance;

		array_push($this->__spool, $instance);

		return $this->__spool;
	}

	public function & read($criteria)
	{
		return $this->__spool;
	}

	/**
	 * обновление всех данных
	 *
	 * return кол-во обновлённых экземпляров
	 * */
	public function update()
	{
		if (!is_array($this->__spool))
			return null;
	}

	/**
	 * удаляет быстро и беспощадно
	 * return кол-во удалённых экземпляров
	 * */
	function delete($criteria)
	{
		return ;
	}
}
?>